Release Train and Release Management Adapter

This adapter can be used for release train management for product development releases. The adapter allows for the creation and maintenance of release trains, which are groups of releases associated with specific timelines and features. It enables the mapping of different releases to specific release trains and facilitates the management of features associated with those releases. The Release Manager can use this component to track the timeline of release trains and plan releases effectively.

Usage

The release train and release management adapter is used for the following operations in the Calibo Accelerate platform:

  • Release Train Management

    The adapter can be used to manage release trains within the product development process.

  • Mapping Releases

    It can be utilized to establish connections between various releases and their corresponding release trains while managing associated activities.

  • Feature Tracking

    The component helps in tracking the management of features for each release, ensuring they adhere to proper timelines.

List of Requirements

The release train and release management adapter must meet the following requirements:

  • One-to-One Mapping

    It must have a one-to-one mapping between release trains.

  • One-to-Many Mapping

    The component should allow a one-to-many mapping between releases and release trains.

  • Data Integrity

    It should maintain all mapping information and serve as the source of truth for validation purposes.

  • Admin Privileges

    Administrative privileges should be provided to perform necessary activities within the component.

  • Secure Connection with Backend Systems and Credential Handling

    The component should establish secure connections with backend systems, and any sensitive credentials required for authentication should be securely stored in a secrets management tool as a security best practice.

APIs and Interfaces

Copy
public interface ElabReleaseService {

   boolean testConnection();

   User getUserContext();

   ReleaseIssuesCount getReleaseIssueCount(String releaseName);

   List<ProjectVersionResponseBean> getProjectReleases(String projectName);

   ProjectVersionResponseBean addProjectRelease(ProjectVersionCreationBean request);

   ProjectVersionResponseBean checkAndGetProjectRelease(String projectName, String releaseName);

   Object associateFixVersions(UpdateFixVersionBean request);

   Object deAssociateFixVersions(UpdateFixVersionBean request);

}

The interfaces to be implemented and the associated classes are as follows:

  • TestConnection()

    • Usage: This interface method is used to test the connection of the component.

    • Input: To establish the connection, the interface retrieves credentials (username and password) securely from the secrets management tool.

    • Output: It provides the status of the connection, indicating whether the connection was successful or not.

  • GetUserContext()

    • Usage: This interface method is used to obtain the context of the user at the component level.

    • Input: The authentication token for the user is passed to the interface, which is then used to fetch user details from the component.

    • Output: It returns the user context, which includes various user-related attributes such as self, name, key, accountId, avatarUrls, displayName, active status, timeZone, and accountType. This context provides comprehensive information about the user.

      Copy
      public class User {

         @JsonProperty("self")
         private String self;
         @JsonProperty("name")
         private String name;
         @JsonProperty("key")
         private String key;
         @JsonProperty("accountId")
         private String accountId;
         @JsonProperty("avatarUrls")
         private AvatarUrls avatarUrls;
         @JsonProperty("displayName")
         private String displayName;
         @JsonProperty("active")
         private Boolean active;
         @JsonProperty("timeZone")
         private String timeZone;
         @JsonProperty("accountType")
         private String accountType;


      }
  • GetReleaseIssueCount(String releaseName)

    • Usage: This interface method is used to get the issue count for a specific release.

    • Input: Release name.

    • Output: A response object of the ReleaseIssuesCount class, which contains various issue count metrics.

      Copy
      public class ReleaseIssuesCount {
          private int totalIssues;
          private int toDoIssues;
          private int inProgressIssues;
          private int blockedIssues;
          private int completedIssues;
      }
  • GetProjectReleases(String projectName)

    • Usage: This interface method is used to retrieve all releases associated with a specific project.

    • Input: Project Name.

    • Output: A list of response objects of the ProjectVersionResponseBean class, each representing a project release.

      Copy
      public class ProjectVersionResponseBean {
         private String id;
         private String description;
         private String name;
         private String archived;
         private String released;
         private String startDate;
         private String releaseDate;
         private String projectId;
      }
  • AddProjectRelease(ProjectVersionCreationBean request)

    • Usage: This interface method is used to create new releases for a project.

    • Input: A request object of the ProjectVersionCreationBean class, containing release details.

      Copy
      public class ProjectVersionCreationBean {
        private Integer projectId;
        private String project;
        private String releaseDate;
        private String startDate;
        private String name;
        private String description;
      }
    • Output: A response object of the ProjectVersionResponseBean class, representing the newly created release.

      Copy
      public class ProjectVersionResponseBean {
         private String id;
         private String description;
         private String name;
         private String archived;
         private String released;
         private String startDate;
         private String releaseDate;
         private String projectId;
      }
  • CheckAndGetProjectRelease(String projectName, String releaseName)

    • Usage: This interface method is used to check and retrieve information about a release for a specified project.

    • Input: Key for project name and release name.

    • Output: A response object of the ProjectVersionResponseBean class, providing details about the project release.

      Copy
      public class ProjectVersionResponseBean {
         private String id;
         private String description;
         private String name;
         private String archived;
         private String released;
         private String startDate;
         private String releaseDate;
         private String projectId;
      }
  • AssociateFixVersions(UpdateFixVersionBean request)

    • Usage: This interface method is used to associate tickets (issues or tasks) with specific releases for a project.

    • Input: A request object of the UpdateFixVersionBean class, specifying project, labels, and release versions.

      Copy
      public class UpdateFixVersionBean {
          String projectName;
          List<String> labels;
          List<ReleaseVersionWrapperBean> releaseVersion;
      }
      public class ReleaseVersionWrapperBean {
          private String id;
          private String name;
          private boolean fromCache;
      }
    • Output: It returns Java object as a response.

  • DeAssociateFixVersions(UpdateFixVersionBean request):

    • Usage: This interface method is used to remove tickets from releases for a project.

    • Input: A request object of the UpdateFixVersionBean class, specifying project, labels, and release versions.

      Copy
      public class UpdateFixVersionBean {
          String projectName;
          List<String> labels;
          List<ReleaseVersionWrapperBean> releaseVersion;
      }
      public class ReleaseVersionWrapperBean {
          private String id;
          private String name;
          private boolean fromCache;
      }
    • Output: It returns Java object as a response.

The following APIs consume the interfaces that are listed earlier in this topic:

  • Release Train Creation

  • Release Train Updation

  • Release Train Release Creation

  • Release Train Release Assignment

  • Release Train Release Feature Association

  • Release Train Release Feature De-association

  • Release Management

  • Release Train Release Deletion

  • Release Train Deletion

Data Models and Formats

The release train and release management adapter utilizes JSON or XML for communication between different parts of the system. JSON and XML are structured data formats commonly used for data interchange.

Data Model for Storing Release Train-Related Information

Here is the structure of the data model that is used to store information related to release trains.

Copy
public class FeatureDetailsEntity extends Auditable {

   @Id
   @GeneratedValue(generator = "uuid")
   @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
   @Column(name = "id")
   private String id;

   @Column(name = "release_train_id")
   private String releaseTrainId;

   @Column(name = "release_train_name")
   private String releaseTrainName;

   @Column(name = "project_id")
   private String projectId;

   @Column(name = "tool_name")
   private String toolName;

   @Column(name = "description")
   private String description;

   @Enumerated(EnumType.STRING)
   @Column(name = "status")
   private StatusEnum status = StatusEnum.ACTIVE;

   @Column(name = "mapping_done")
   private Boolean mappingDone;

}

Data Model for Storing Release Mapping Information

Here is the structure of the data model that is used to store information related to release mapping.

Copy
public class ReleaseTrainReleaseMappingEntity extends Auditable {

   @Id
   @GeneratedValue(generator = "uuid")
   @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
   @Column(name = "id")
   private String id;

   @Column(name = "release_id")
   private String releaseTrainId;

   @Column(name = "release_name")
   private String releaseTrainName;
   @Column(name = "release_train_id")
   private String releaseTrainId;

   @Column(name = "project_id")
   private String projectId;

   @Column(name = "tool_name")
   private String toolName;

   @Column(name = "description")
   private String description;

   @Enumerated(EnumType.STRING)
   @Column(name = "status")
   private StatusEnum status = StatusEnum.ACTIVE;

   @Column(name = "mapping_done")
   private Boolean mappingDone;

}

Data Model for Storing Feature Mapping Information

Here is the structure of the data model that is used to store information related to feature mapping.

Copy
public class ReleaseFeatureMappingEntity extends Auditable {

   @Id
   @GeneratedValue(generator = "uuid")
   @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
   @Column(name = "id")
   private String id;

   @Column(name = "feature_id")
   private String featureId;

   @Column(name = "release_id")
   private String releaseId;

   @Column(name = "project_id")
   private String projectId;

   @Column(name = "tool_name")
   private String toolName;



   @Enumerated(EnumType.STRING)
   @Column(name = "status")
   private StatusEnum status = StatusEnum.ACTIVE;

   @Column(name = "mapping_done")
   private Boolean mappingDone;

}

 

Related Topics Link IconRecommended Topics

What's next? Data Pipeline Studio Adapters